#ifndef ENSEMBLECOMPETENCESCLASSE_H
#define ENSEMBLECOMPETENCESCLASSE_H 1

#include "CompetenceClasse.h"

#include <vector>

/**
 * Classe qui gère les ensembles de compétences de classe. Cela permet
 * d'avoir au même endroit le nom, le coût de l'ensemble, ainsi que
 * les compétences incluses et la liste des éléments dont l'état est
 * gelé lors de la sélection d'un tel ensemble.
 *
 * @author Johan "Solo" Luisier
 */
class EnsembleCompetencesClasse : public CompetenceClasse
{
 public:
  EnsembleCompetencesClasse();
  EnsembleCompetencesClasse(const std::string& nom, const unsigned& prix,
			    const std::vector< unsigned >& membres,
			    const unsigned& numPrerequis = 0,
			    const unsigned& numRaces = 0,
			    const bool& oblig = false);
  EnsembleCompetencesClasse(const std::string& nom, const unsigned& prix,
			    const std::vector< unsigned >& membres,
			    const std::vector< unsigned >& exclus,
			    const unsigned& numPrerequis = 0,
			    const unsigned& numRaces = 0,
			    const bool& oblig = false);
  EnsembleCompetencesClasse(const EnsembleCompetencesClasse& lsEnsComp);
  ~EnsembleCompetencesClasse();
  const EnsembleCompetencesClasse&
    operator=(const EnsembleCompetencesClasse& lsEnsComp);
  const std::vector< unsigned >* membres() const;
  const std::vector< unsigned >* exclus() const;
  const unsigned& numeroPrerequis() const;
  const unsigned& numeroRacesAdmises() const;
  const bool& choixPrealable() const;
 protected:
  /**
   * Conteneur des numéros des compétences comprises dans l'ensemble.
   */
  std::vector< unsigned > Membres;
  /**
   * Conteneur des compétences "gelées" lors du choix de l'ensemble
   * (pour éviter de trafiquer un ensemble).
   */
  std::vector< unsigned > Exclus;
  /**
   * Indique quels sont les prérequis à appliquer pour cet
   * ensemble. Par défaut, il s'agit du même pour tous.
   */
  unsigned NumeroPrerequis;
  /**
   * Indique quelles sont les races admises pour cet ensemble. Par
   * défaut, il s'agit des mêmes pour tous.
   */
  unsigned NumeroRacesAdmises;
  /**
   * Indique si le choix est obligatoire avant de passer à la
   * suite. Par défaut ce n'est pas le cas.
   */
  bool ChoixPrealable;
};

#endif // ENSEMBLECOMPETENCESCLASSE_H
